		LIST   P=PIC16F877A
		RADIX	HEX		
		INCLUDE	<P16F877A.INC>

			ORG	0x04
			GOTO	INICIO	;Inicio del Programa

OPCION		EQU	0x21		;Variables
CONTADOR	EQU 0x22
	
SUMA2		MOVFW	0X02	;SUMA DE DOS EN DOS
			ADDWF	CONTADOR,1
			RETURN

MOSTRAR		MOVFW	CONTADOR;Muestra el contador en el display 1
			MOVWF	PORTB
			RETURN

INCREMENTO	BTFSC	PORTC,RC0;Suma de 1 en 1
			GOTO	MOSTRAR
			INCF	CONTADOR,1
			MOVFW	CONTADOR
			XORLW	0X0A
			BTFSC	STATUS,Z
			CALL	REINICIO
			GOTO	MOSTRAR

DECREMENTO	BTFSC	PORTC,RC0;Resta de 1 en 1
			GOTO	MOSTRAR
			DECF	CONTADOR,1
			MOVFW	CONTADOR
			XORLW	0X00
			BTFSC	STATUS,Z
			CALL	REINICIO2
			GOTO	MOSTRAR

PARES		BTFSC	PORTC,RC0;Suma de 2 en 2
			GOTO	MOSTRAR
			MOVLW	0X00
			BTFSC	CONTADOR,0
			CALL	SUMA2
			BTFSS	W,0		;Prueba si es par
			INCF	CONTADOR,1
			NOP
			MOVLW	0X0A
			XORWF	CONTADOR,0
			BTFSC	STATUS,Z
			CALL	REINICIO
			GOTO	MOSTRAR

PRIMOS		BTFSC	PORTC,RC0;Muestra numeros primos 1,2,3,5,7
			GOTO	MOSTRAR
			NOP
			BTFSC	CONTADOR,0;si es impar suma1
			GOTO	PRIMOS2
			INCF	CONTADOR,1
			
PRIMOS2		MOVLW	0X01
			XORLW	CONTADOR
			BTFSC	STATUS,Z
			INCF	CONTADOR,1
			CALL	SUMA2
			MOVLW	0X09
			XORLW	CONTADOR
			BTFSS	STATUS,Z
			GOTO	MOSTRAR
			CALL	REINICIOPRIMO
			GOTO	MOSTRAR

REINICIOPRIMO	MOVLW	0X01	;Reinicios de contador
				MOVWF	CONTADOR			
			
REINICIO	MOVLW	0X00
			MOVWF	CONTADOR

REINICIO2	MOVLW	0X0A
			MOVWF	CONTADOR
			
BOTON2	BTFSC	PORTC,RC1	;prueba de boton2
		INCF	OPCION,1
		CALL	REVISION
		MOVFW	OPCION
		MOVWF	PORTD
		GOTO	BOTON2
		

REVISION	MOVFW	OPCION	; Revision de posicion, escoje a donde enviar segun el 
			XORLW	0x01	; valor de OPCION
			BTFSC	STATUS,Z
			BTFSS	STATUS,Z
			CALL	INCREMENTO
			MOVFW	OPCION
			XORLW	0x02
			BTFSC	STATUS,Z
			BTFSS	STATUS,Z
			CALL	DECREMENTO
			MOVFW	OPCION
			XORLW	0x03
			BTFSC	STATUS,Z
			CALL	PRIMOS
			CALL	PARES
			GOTO	BOTON2

INICIO	BSF	STATUS,RP0
		MOVLW	0X00
		MOVWF	TRISB
		MOVWF	TRISD
		MOVLW	0XFF
		MOVWF	TRISC
		BCF	STATUS,RP0
		MOVLW	0X01		;Inicio del Programa
		MOVWF	OPCION
		GOTO	REVISION
		END
